home *** CD-ROM | disk | FTP | other *** search
/ Ultimedia 2 / Ultimedia 2.iso / tools / soundtools / delitracker_ii / files / developer.lha / Developer / Examples / QCReplay.s < prev    next >
Text File  |  1994-04-15  |  24KB  |  1,248 lines

  1.  
  2.     incdir    "Includes:"
  3.     include    "misc/DeliPlayer.i"
  4.  
  5. ;
  6. ;
  7.     SECTION Player,Code
  8. ;
  9. ;
  10.  
  11.     PLAYERHEADER PlayerTagArray
  12.  
  13.     dc.b '$VER: QuadraComposer 2.0 player module V0.8 (18 Mar 94)',0
  14.     even
  15.  
  16. PlayerTagArray
  17.     dc.l    DTP_RequestDTVersion,16
  18.     dc.l    DTP_PlayerVersion,00<<16+80
  19.     dc.l    DTP_PlayerName,PName
  20.     dc.l    DTP_Creator,CName
  21.     dc.l    DTP_DeliBase,delibase
  22.     dc.l    DTP_Check2,Chk
  23.     dc.l    DTP_CheckLen,ChkLen
  24.     dc.l    DTP_Interrupt,Int
  25.     dc.l    DTP_InitPlayer,InitPlay
  26.     dc.l    DTP_EndPlayer,EndPlay
  27.     dc.l    DTP_InitSound,InitSnd
  28.     dc.l    DTP_EndSound,EndSnd
  29.     dc.l    TAG_DONE
  30.  
  31. *-----------------------------------------------------------------------*
  32. ;
  33. ; Player/Creatorname und lokale Daten
  34.  
  35. PName        dc.b 'QuadraComposer',0
  36. CName        dc.b 'Copyright © 1993 Technological ArtWork',10
  37.         dc.b '(Bo Lincoln & Calle Englund)',10
  38.         dc.b 'adapted by Delirium',0
  39.     even
  40. delibase    dc.l 0
  41.  
  42. *-----------------------------------------------------------------------*
  43. ;
  44. ;Interrupt für Replay
  45.  
  46. Int
  47.     movem.l    d2-d7/a2-a6,-(sp)
  48.     bsr    QC_music            ; DudelDiDum
  49.     movem.l    (sp)+,d2-d7/a2-a6
  50.     rts
  51.  
  52. *-----------------------------------------------------------------------*
  53. ;
  54. ; Testet auf Modul
  55.  
  56. Chk                        ; QuadraComposer ?
  57.     move.l    dtg_ChkData(a5),a0
  58.     moveq    #-1,d0                ; Modul nicht erkannt (default)
  59.     cmp.l    #"FORM",(a0)
  60.     bne.s    ChkEnd
  61.     cmp.l    #"EMOD",8(a0)
  62.     bne.s    ChkEnd
  63.     cmp.l    #"EMIC",12(a0)
  64.     bne.s    ChkEnd
  65.     cmp.w    #1,20(a0)
  66.     bne.s    ChkEnd
  67.     moveq    #0,d0                ; Modul erkannt
  68. ChkEnd
  69.     rts
  70.  
  71. ChkLen = *-Chk
  72.  
  73. *-----------------------------------------------------------------------*
  74. ;
  75. ; Init Player
  76.  
  77. InitPlay
  78.     moveq    #0,d0
  79.     move.l    dtg_GetListData(a5),a0        ; Function
  80.     jsr    (a0)
  81.     move.l    a0,QC_data
  82.  
  83.     bsr    QC_rel
  84.  
  85.     move.l    dtg_AudioAlloc(a5),a0        ; Function
  86.     jsr    (a0)                ; returncode is already set !
  87.     rts
  88.  
  89. *-----------------------------------------------------------------------*
  90. ;
  91. ; End Player
  92.  
  93. EndPlay
  94.     move.l    dtg_AudioFree(a5),a0        ; Function
  95.     jsr    (a0)
  96.     rts
  97.  
  98. *-----------------------------------------------------------------------*
  99. ;
  100. ; Init Module
  101.  
  102. InitSnd
  103.     bsr    QC_init
  104.     rts
  105.  
  106. *-----------------------------------------------------------------------*
  107. ;
  108. ; Clean up Module
  109.  
  110. EndSnd
  111.     bsr    QC_end
  112.     rts
  113.  
  114. *-----------------------------------------------------------------------*
  115. ;
  116. ; QuadraComposer2.0-Replay
  117.  
  118. * This replayroutine was written by Bo Lincoln (Eternal).
  119. * Copyright © 1993 Technological Artwork. All rights reserved.
  120. * You may use this routine in your programs.
  121. * This is the normal routine.
  122. * Worst case is about 20(?) rasterlines.
  123. * How to use: Call QC_init to init the mod.
  124. *             Call QC_music every vertical blank.
  125. *             Call QC_end to stop.
  126. *             The EMOD should be at QC_data.
  127. * You can not use Tempo in this routine.
  128.  
  129.  
  130. QC_rel:    move.l QC_data(pc),a0        ;Check if the module is ok
  131.     cmp.l #"FORM",(a0)
  132.     bne QC_relerr
  133.     cmp.l #"EMOD",8(a0)
  134.     bne QC_relerr
  135.     cmp.l #"EMIC",12(a0)
  136.     bne QC_relerr
  137.     cmp.w #1,20(a0)
  138.     bne QC_relerr
  139.  
  140. ;    or.b #$2,$bfe001
  141.     moveq #0,d7        ;Get the adresses to the sampleinfos
  142.     move.b 63(a0),d7    ;and init the real adresses in the infos
  143.     subq #1,d7
  144.     move.l QC_data(pc),d1
  145.     lea 64(a0),a0
  146.     lea QC_samplepointers(pc),a1
  147. QC_sploop:moveq #0,d0
  148.     move.b (a0),d0
  149.     add.w d0,d0
  150.     add.w d0,d0
  151.     move.l a0,(a1,d0.w)
  152.     add.l d1,30(a0)
  153.     move.l 30(a0),a2
  154.     clr.w (a2)
  155.     lea 34(a0),a0
  156.     dbf d7,QC_sploop
  157.  
  158.     lea QC_patternpointers(pc),a1    ;Get the patternadresses
  159.     moveq #0,d7
  160.     addq #1,a0
  161.     move.b (a0)+,d7
  162.     subq #1,d7
  163.     move.l QC_data(pc),d1
  164. QC_pploop:moveq #0,d0
  165.     move.b (a0),d0
  166.     add.w d0,d0
  167.     add.w d0,d0
  168.     move.l a0,(a1,d0.w)
  169.     add.l d1,22(a0)
  170.     lea 26(a0),a0
  171.     dbf d7,QC_pploop
  172.  
  173.     clr.w QC_nrofpos
  174.     move.b (a0)+,QC_nrofpos+1
  175.     move.l a0,QC_posstart
  176.     moveq #0,d0
  177. QC_relerr:moveq #-1,d0
  178.     rts
  179.  
  180. QC_init:move.l QC_posstart(pc),a0
  181.     lea QC_patternpointers(pc),a1
  182.     moveq #0,d0
  183.     move.b (a0),d0
  184.     add.w d0,d0
  185.     add.w d0,d0
  186.     move.l (a1,d0.w),a1
  187.     move.l 22(a1),QC_currpattpointer
  188.     move.b 1(a1),QC_breakrow+1
  189.     move.w #6,QC_speed
  190.     move.w QC_speed(pc),QC_speedcount
  191.     clr.b QC_newposflag
  192.     clr.w QC_rowcount
  193.     clr.w QC_pos
  194.     move.w #1,t_length+QC_chan1
  195.     move.w #1,t_length+QC_chan2
  196.     move.w #1,t_length+QC_chan3
  197.     move.w #1,t_length+QC_chan4
  198.     move.w #1,t_replen+QC_chan1
  199.     move.w #1,t_replen+QC_chan2
  200.     move.w #1,t_replen+QC_chan3
  201.     move.w #1,t_replen+QC_chan4
  202. QC_end:
  203.     moveq #0,d0
  204.     lea $dff000,a0
  205.     move.w d0,$a8(a0)
  206.     move.w d0,$b8(a0)
  207.     move.w d0,$c8(a0)
  208.     move.w d0,$d8(a0)
  209.     move.w #$f,$96(a0)
  210.     rts
  211.  
  212. QC_music:
  213.     addq.w #1,QC_speedcount
  214.     move.w QC_speed,d0
  215.     cmp.w QC_speedcount,d0
  216.     bgt QC_nonew
  217.     tst.b QC_pattwait
  218.     beq QC_getnotes
  219.     subq.b #1,QC_pattwait
  220.     clr.w QC_speedcount
  221.  
  222. QC_nonew:lea QC_samplepointers(pc),a4
  223.     lea QC_periods(pc),a3
  224.     lea QC_chan1(pc),a6
  225.     lea $dff0a0,a5
  226.     bsr QC_chkplayfx
  227.     lea QC_chan2-QC_chan1(a6),a6
  228.     lea $10(a5),a5
  229.     bsr QC_chkplayfx
  230.     lea QC_chan2-QC_chan1(a6),a6
  231.     lea $10(a5),a5
  232.     bsr QC_chkplayfx
  233.     lea QC_chan2-QC_chan1(a6),a6
  234.     lea $10(a5),a5    
  235.     bsr QC_chkplayfx
  236.  
  237.     tst.w QC_dmacon
  238.     beq QC_mend
  239.     move.w QC_dmacon(pc),$dff096
  240.     move.l    a0,-(sp)
  241.     move.l    delibase(pc),a0            ; added by Delirium
  242.     move.l    dtg_WaitAudioDMA(a0),a0
  243.     jsr    (a0)
  244.     move.l    (sp)+,a0
  245.     or.w #$8000,QC_dmacon
  246.     move.w QC_dmacon(pc),$dff096
  247.     move.l    a0,-(sp)
  248.     move.l    delibase(pc),a0            ; added by Delirium
  249.     move.l    dtg_WaitAudioDMA(a0),a0
  250.     jsr    (a0)
  251.     move.l    (sp)+,a0
  252.     clr.w QC_dmacon
  253.     lea QC_chan1+t_repeat(pc),a0
  254.     lea $dff000,a5
  255.     move.l (a0),$a0(a5)
  256.     move.w 4(a0),$a4(a5)
  257.     move.l QC_chan2-QC_chan1(a0),$b0(a5)
  258.     move.w 4+QC_chan2-QC_chan1(a0),$b4(a5)
  259.     move.l QC_chan3-QC_chan1(a0),$c0(a5)
  260.     move.w 4+QC_chan3-QC_chan1(a0),$c4(a5)
  261.     move.l QC_chan4-QC_chan1(a0),$d0(a5)
  262.     move.w 4+QC_chan4-QC_chan1(a0),$d4(a5)
  263.     rts
  264.  
  265.  
  266. QC_chkplayfx:
  267.     lea QC_playfx(pc),a2
  268.     move.b t_cmd(a6),d0
  269.     and.w #$f,d0
  270.     add.w d0,d0
  271.     add.w d0,d0
  272.     move.l (a2,d0.w),a0
  273.     jmp (a0)
  274.  
  275. QC_getnotes:
  276.     clr.w QC_speedcount
  277.     move.l QC_currpattpointer(pc),a0
  278.     move.w QC_rowcount(pc),d0
  279.     asl.w #4,d0
  280.     add.w d0,a0
  281.     lea QC_samplepointers(pc),a4
  282.     lea QC_periods(pc),a3
  283.  
  284.     lea $dff0a0,a5
  285.     lea QC_chan1(pc),a6
  286.     bsr QC_playnote
  287.     lea $10(a5),a5
  288.     lea QC_chan2-QC_chan1(a6),a6
  289.     bsr QC_playnote
  290.     lea $10(a5),a5
  291.     lea QC_chan2-QC_chan1(a6),a6
  292.     bsr QC_playnote
  293.     lea $10(a5),a5
  294.     lea QC_chan2-QC_chan1(a6),a6
  295.     bsr QC_playnote
  296.     tst.w QC_dmacon
  297.     beq QC_update
  298.  
  299.     move.w QC_dmacon(pc),$dff096
  300.     move.l    a0,-(sp)
  301.     move.l    delibase(pc),a0            ; added by Delirium
  302.     move.l    dtg_WaitAudioDMA(a0),a0
  303.     jsr    (a0)
  304.     move.l    (sp)+,a0
  305.     or.w #$8000,QC_dmacon
  306.     move.w QC_dmacon(pc),$dff096
  307.     move.l    a0,-(sp)
  308.     move.l    delibase(pc),a0            ; added by Delirium
  309.     move.l    dtg_WaitAudioDMA(a0),a0
  310.     jsr    (a0)
  311.     move.l    (sp)+,a0
  312.     clr.w QC_dmacon
  313.     lea QC_chan1+t_repeat(pc),a0
  314.     lea $dff000,a5
  315.     move.l (a0),$a0(a5)
  316.     move.w 4(a0),$a4(a5)
  317.     move.l QC_chan2-QC_chan1(a0),$b0(a5)
  318.     move.w 4+QC_chan2-QC_chan1(a0),$b4(a5)
  319.     move.l QC_chan3-QC_chan1(a0),$c0(a5)
  320.     move.w 4+QC_chan3-QC_chan1(a0),$c4(a5)
  321.     move.l QC_chan4-QC_chan1(a0),$d0(a5)
  322.     move.w 4+QC_chan4-QC_chan1(a0),$d4(a5)
  323.  
  324. QC_update:tst.b QC_newposflag
  325.     beq QC_tstend
  326.     clr.b QC_newposflag
  327.     move.w QC_newposnr,QC_pos
  328.     bra QC_newpos
  329. QC_tstend:tst.b QC_jumpbreakflag
  330.     beq QC_tstend2
  331.     clr.b QC_jumpbreakflag
  332.     move.w QC_looprow(pc),d0
  333.     cmp.w QC_breakrow(pc),d0
  334.     bgt QC_mend
  335.     move.w d0,QC_rowcount
  336.     rts
  337. QC_tstend2:
  338.     addq.w #1,QC_rowcount
  339.     move.w QC_rowcount(pc),d0
  340.     cmp.w QC_breakrow(pc),d0
  341.     ble QC_mend
  342.     addq.w #1,QC_pos
  343. QC_newpos:move.w QC_pos(pc),d0
  344.     cmp.w QC_nrofpos(pc),d0
  345.     blt QC_getpos
  346.     clr.w QC_pos
  347.     moveq #0,d0
  348. QC_getpos:move.l QC_posstart(pc),a0
  349.     move.b (a0,d0.w),d0
  350.     add.w d0,d0
  351.     add.w d0,d0
  352.     lea QC_patternpointers(pc),a0
  353.     move.l (a0,d0.w),a0
  354.     move.l 22(a0),QC_currpattpointer
  355.     move.b 1(a0),QC_breakrow+1
  356.     move.w QC_newrow(pc),QC_rowcount
  357.     clr.w QC_newrow
  358. QC_mend:rts
  359.  
  360. QC_playnote:move.l (a0)+,(a6)
  361.     moveq #0,d0
  362.     move.b (a6),d0
  363.     beq QC_isnote
  364.     add.w d0,d0
  365.     add.w d0,d0
  366.     move.l (a4,d0.w),a1
  367.     move.b 1(a1),t_volume+1(a6)
  368.     move.b 25(a1),d0
  369.     and.w #$f,d0
  370.     add.w d0,d0
  371.     add.w d0,d0
  372.     move.l (a3,d0.w),t_finetune(a6)
  373.     move.l 30(a1),d1
  374.     move.l d1,t_start(a6)
  375.     move.w t_volume(a6),8(a5)
  376.     btst #0,24(a1)
  377.     beq QC_noloop
  378.     moveq #0,d0
  379.     move.w 26(a1),d0
  380.     add.l d0,d1
  381.     add.l d0,d1
  382.     move.l d1,t_repeat(a6)
  383.     moveq #0,d0
  384.     move.w 26(a1),d0
  385.     moveq #0,d1
  386.     move.w 28(a1),d1
  387.     add.l d0,d1
  388.     move.w d1,t_length(a6)
  389.     move.w 28(a1),t_replen(a6)
  390.     bra QC_isnote
  391. QC_noloop:clr.l t_repeat(a6)
  392.     move.w #$1,t_replen(a6)
  393.     move.w 2(a1),t_length(a6)
  394. QC_isnote:
  395.     tst.b t_notenr(a6)
  396.     blt QC_chkfirstfx
  397.     move.b t_notenr(a6),t_notenr2+1(a6)
  398.     move.w t_cmd(a6),d0
  399.     and.w #$ff0,d0
  400.     cmp.w #$e50,d0
  401.     beq QC_setfinetunefirst
  402.     and.w #$f00,d0
  403.     cmp.w #$300,d0
  404.     beq QC_settoneport
  405.     cmp.w #$500,d0
  406.     beq QC_settoneport
  407. QC_getper:move.w t_notenr2(a6),d0
  408.     add.w d0,d0
  409.     move.l t_finetune(a6),a2
  410.     move.w (a2,d0.w),t_period(a6)
  411.     move.w t_cmd(a6),d0
  412.     and.w #$ff0,d0
  413.     cmp.w #$ed0,d0
  414.     beq QC_notedelay
  415.     move.w t_dmabit(a6),d0
  416.     or.w d0,QC_dmacon
  417.     move.l t_start(a6),(a5)
  418.     move.w t_length(a6),4(a5)
  419.     move.w t_period(a6),6(a5)
  420. QC_chkfirstfx:
  421.     lea QC_fxaftersetperiod(pc),a2
  422.     moveq #0,d0
  423.     move.b t_cmd(a6),d0
  424.     add.w d0,d0
  425.     add.w d0,d0
  426.     move.l (a2,d0.w),a2
  427.     jmp (a2)
  428.  
  429. QC_setfinetunefirst:
  430.     move.b t_cmdarg(a6),d0
  431.     add.w d0,d0
  432.     add.w d0,d0
  433.     move.l (a3,d0.w),t_finetune(a6)
  434.     bra QC_getper
  435.             
  436. QC_ecommands:
  437.     lea QC_efx(pc),a2
  438.     move.b t_cmdarg(a6),d0
  439.     and.w #$f0,d0
  440.     lsr.w #2,d0
  441.     move.l (a2,d0.w),a2
  442.     jmp (a2) 
  443.  
  444. QC_playecommands:
  445.     lea QC_playefx(pc),a2
  446.     move.b t_cmdarg(a6),d0
  447.     and.w #$f0,d0
  448.     lsr.w #2,d0
  449.     move.l (a2,d0.w),a2
  450.     jmp (a2) 
  451.  
  452. ********** Effect commands **********
  453.  
  454. QC_arpeggio:
  455.     tst.b t_cmdarg(a6)
  456.     beq QC_mend
  457.     move.w QC_speedcount,d0
  458.     lea QC_arptbl,a2
  459.     tst.b (a2,d0.w)
  460.     beq QC_arp2
  461.     blt QC_arp1
  462.     move.b t_cmdarg(a6),d0
  463.     and.w #$f,d0
  464.     add.w t_notenr2(a6),d0
  465.     add.w d0,d0
  466.     move.l t_finetune(a6),a2
  467.     move.w (a2,d0.w),6(a5)
  468.     rts
  469. QC_arp1:move.w t_period(a6),6(a5)
  470.     rts
  471. QC_arp2:moveq #0,d0
  472.     move.b t_cmdarg(a6),d0
  473.     lsr.w #4,d0
  474.     add.w t_notenr2(a6),d0
  475.     add.w d0,d0
  476.     move.l t_finetune(a6),a2
  477.     move.w (a2,d0.w),6(a5)
  478.     rts
  479.  
  480. QC_slideup:
  481.     moveq #0,d0            
  482.     move.b t_cmdarg(a6),d0        
  483.     sub.w d0,t_period(a6)        
  484.     cmp.w #113,t_period(a6)        
  485.     bgt QC_sunotlow
  486.     move.w #113,t_period(a6)
  487. QC_sunotlow:
  488.     move.w t_period(a6),6(a5)
  489.     rts    
  490.  
  491. QC_slidedown:
  492.     moveq #0,d0
  493.     move.b t_cmdarg(a6),d0
  494.     add.w d0,t_period(a6)
  495.     cmp.w #856,t_period(a6)
  496.     blt QC_sdnothigh
  497.     move.w #856,t_period(a6)
  498. QC_sdnothigh:
  499.     move.w t_period(a6),6(a5)
  500.     rts    
  501.  
  502. QC_settoneport:
  503.     move.w t_notenr2(a6),d0
  504.     add.w d0,d0
  505.     move.l t_finetune(a6),a2
  506.     move.w (a2,d0.w),d0
  507.     move.w d0,t_wantedperiod(a6)
  508.     cmp.w t_period(a6),d0
  509.     bgt QC_setportdown
  510.     clr.b t_portdir(a6)
  511.     rts
  512. QC_setportdown:
  513.     move.b #1,t_portdir(a6)
  514.     rts
  515.  
  516. QC_toneport:
  517.     tst.w t_wantedperiod(a6)
  518.     beq QC_mend
  519.     moveq #0,d0
  520.     move.b t_cmdarg(a6),d0
  521.     beq QC_tpold
  522.     move.b d0,t_portspeed(a6)
  523.     tst.b t_portdir(a6)
  524.     bne QC_portdown
  525.     sub.w d0,t_period(a6)
  526.     move.w t_wantedperiod(a6),d0
  527.     cmp.w t_period(a6),d0
  528.     blt QC_notyetwanted
  529.     move.w d0,6(a5)
  530.     move.w d0,t_period(a6)
  531.     clr.w t_wantedperiod(a6)
  532.     rts
  533. QC_tpold:move.b t_portspeed(a6),d0
  534.     tst.b t_portdir(a6)
  535.     bne QC_portdown
  536.     sub.w d0,t_period(a6)
  537.     move.w t_wantedperiod(a6),d0
  538.     cmp.w t_period(a6),d0
  539.     blt QC_notyetwanted
  540.     move.w d0,6(a5)
  541.     move.w d0,t_period(a6)
  542.     clr.w t_wantedperiod(a6)
  543.     rts
  544. QC_portdown:
  545.     add.w d0,t_period(a6)
  546.     move.w t_wantedperiod(a6),d0
  547.     cmp.w t_period(a6),d0
  548.     bgt QC_notyetwanted
  549.     move.w d0,6(a5)
  550.     move.w d0,t_period(a6)
  551.     clr.w t_wantedperiod(a6)
  552.     rts
  553. QC_notyetwanted:
  554.     tst.b t_glisscont(a6)
  555.     beq QC_nogliss
  556.     move.l t_finetune(a6),a2
  557.     move.w t_period(a6),d0
  558. QC_glissloop:
  559.     cmp.w (a2)+,d0
  560.     blt QC_glissloop
  561.     move.w -2(a2),6(a5)
  562.     rts
  563. QC_nogliss:
  564.     move.w t_period(a6),6(a5)
  565.     rts
  566.     
  567. QC_vibrato:
  568.     moveq #0,d0
  569.     move.b t_vibwave(a6),d0
  570.     asl.w #7,d0
  571.     lea QC_vibtables(pc),a2
  572.     add.w d0,a2
  573.     moveq #0,d0
  574.     move.b t_cmdarg(a6),d0
  575.     beq QC_vib    
  576.     move.w d0,d1
  577.     and.b #$f,d0
  578.     beq QC_vibusespeed
  579.     and.b #$f0,t_vibcmd(a6)
  580.     or.b d0,t_vibcmd(a6)
  581. QC_vibusespeed:
  582.     and.b #$f0,d1
  583.     beq QC_vib
  584.     and.b #$f,t_vibcmd(a6)
  585.     or.b d1,t_vibcmd(a6)
  586. QC_vib:    move.b t_vibcmd(a6),d0
  587.     lsr.w #3,d0
  588.     add.w d0,t_vibpos(a6)
  589.     and.w #$7e,t_vibpos(a6)
  590.     move.w t_vibpos(a6),d0
  591.     move.w t_period(a6),d1
  592.     move.w (a2,d0.w),d0
  593.     move.b t_vibcmd(a6),d2
  594.     and.w #$f,d2
  595.     muls d2,d0
  596.     add.l d0,d0
  597.     add.l d0,d0
  598.     swap d0
  599.     add.w d0,d1
  600.     cmp.w #856,d1
  601.     blt QC_vibnothigh
  602.     move.w #856,d1
  603. QC_vibnothigh:
  604.     cmp.w #113,d1
  605.     bgt QC_vibnotlow
  606.     moveq #113,d1
  607. QC_vibnotlow:
  608.     move.w d1,6(a5)
  609.     rts    
  610.  
  611. QC_toneportandvolslide:
  612.     tst.w t_wantedperiod(a6)
  613.     beq QC_volslide
  614.     bsr QC_tpold
  615.     bra QC_volslide
  616.  
  617. QC_vibratoandvolslide:
  618.     bsr QC_vib
  619.     bra QC_volslide
  620.  
  621. QC_tremolo:
  622.     moveq #0,d0
  623.     move.b t_tremwave(a6),d0
  624.     asl.w #7,d0
  625.     lea QC_vibtables(pc),a2
  626.     add.w d0,a2
  627.     moveq #0,d0
  628.     move.b t_cmdarg(a6),d0
  629.     beq QC_trem    
  630.     move.w d0,d1
  631.     and.b #$f,d0
  632.     beq QC_tremusespeed
  633.     and.b #$f0,t_tremcmd(a6)
  634.     or.b d0,t_tremcmd(a6)
  635. QC_tremusespeed:
  636.     and.b #$f0,d1
  637.     beq QC_trem
  638.     and.b #$f,t_tremcmd(a6)
  639.     or.b d1,t_tremcmd(a6)
  640. QC_trem:move.b t_tremcmd(a6),d0
  641.     lsr.w #3,d0
  642.     add.w d0,t_trempos(a6)
  643.     and.w #$7e,t_trempos(a6)
  644.     move.w t_trempos(a6),d0
  645.     move.w t_volume(a6),d1
  646.     move.w (a2,d0.w),d0
  647.     move.b t_tremcmd(a6),d2
  648.     and.w #$f,d2
  649.     muls d2,d0
  650.     asl.l #3,d0
  651.     swap d0
  652.     add.w d0,d1
  653.     cmp.w #40,d1
  654.     blt QC_tremnothigh
  655.     move.w #40,d1
  656. QC_tremnothigh:
  657.     tst.w d1
  658.     bgt QC_tremnotlow
  659.     moveq #0,d1
  660. QC_tremnotlow:
  661.     move.w d1,8(a5)
  662.     rts    
  663.  
  664. QC_sampleoffset:
  665.     moveq #0,d0
  666.     move.b t_cmdarg(a6),d0
  667.     beq QC_sook
  668.     move.b d0,t_sampleoffset(a6)
  669. QC_sook:move.b t_sampleoffset(a6),d0
  670.     asl.w #8,d0
  671.     moveq #0,d1
  672.     move.w t_length(a6),d1
  673.     sub.l d0,d1
  674.     ble QC_sotoolong
  675.     move.w d1,t_length(a6)
  676.     add.l d0,d0
  677.     add.l d0,t_start(a6)
  678.     move.l t_start(a6),(a5)
  679.     move.w t_length(a6),4(a5)
  680.     rts
  681. QC_sotoolong:
  682.     move.w #1,t_length(a6)
  683.     move.w t_length(a6),4(a5)
  684.     rts
  685.     
  686. QC_volslide:
  687.     moveq #0,d0
  688.     move.b t_cmdarg(a6),d0
  689.     lsr.w #4,d0
  690.     beq QC_volslidedown
  691.     add.w d0,t_volume(a6)
  692.     cmp.w #$40,t_volume(a6)    
  693.     blt QC_setvol
  694.     move.w #$40,t_volume(a6)
  695. QC_setvol:move.w t_volume(a6),8(a5)
  696.     rts
  697. QC_volslidedown:
  698.     move.b t_cmdarg(a6),d0
  699.     sub.w d0,t_volume(a6)
  700.     tst.w t_volume(a6)    
  701.     bgt QC_setvol
  702.     clr.w t_volume(a6)
  703.     clr.w 8(a5)
  704.     rts        
  705.  
  706. QC_posjump:
  707.     move.b t_cmdarg(a6),QC_newposnr+1
  708.     move.b #1,QC_newposflag
  709.     clr.w QC_newrow
  710.     rts        
  711.  
  712. QC_volumechange:
  713.     move.b t_cmdarg(a6),d0
  714.     cmp.b #$40,d0
  715.     blo QC_volchhigh
  716.     move.w #$40,t_volume(a6)
  717.     move.w #$40,8(a5)
  718.     rts
  719. QC_volchhigh:
  720.     move.b d0,t_volume+1(a6)
  721.     move.w t_volume(a6),8(a5)
  722.     rts
  723.  
  724. QC_patternbreak:
  725.     move.w QC_pos,d0
  726.     addq.w #1,d0
  727.     move.w d0,QC_newposnr
  728.     move.b t_cmdarg(a6),QC_newrow+1
  729.     move.b #1,QC_newposflag
  730.     rts
  731.  
  732. QC_setspeed:
  733.     move.b t_cmdarg(a6),d0
  734.     beq QC_setspeed1
  735.     cmp.b #$1f,d0
  736.     bhi QC_end
  737.     move.b d0,QC_speed+1
  738.     clr.w QC_speedcount
  739.     rts
  740. QC_setspeed1:
  741.     move.w #1,QC_speed
  742.     clr.w QC_speedcount
  743.     rts
  744.  
  745. QC_setfilter:
  746.     move.b t_cmdarg(a6),d0
  747.     and.b #1,d0
  748.     add.b d0,d0
  749.     and.b #$fd,$bfe001
  750.     or.b d0,$bfe001
  751.     rts
  752.  
  753. QC_fineslideup:
  754.     move.b t_cmdarg(a6),d0
  755.     and.w #$f,d0
  756.     sub.w d0,t_period(a6)
  757.     cmp.w #113,t_period(a6)
  758.     bgt QC_fsunotlow
  759.     move.w #113,t_period(a6)
  760. QC_fsunotlow:
  761.     move.w t_period(a6),6(a5)
  762.     rts
  763.  
  764. QC_fineslidedown:
  765.     move.b t_cmdarg(a6),d0
  766.     and.w #$f,d0
  767.     add.w d0,t_period(a6)
  768.     cmp.w #856,t_period(a6)
  769.     blt QC_fsdnothigh
  770.     move.w #856,t_period(a6)
  771. QC_fsdnothigh:
  772.     move.w t_period(a6),6(a5)
  773.     rts    
  774.     
  775. QC_glisscontrol:
  776.     move.b t_cmdarg(a6),t_glisscont(a6)
  777.     and.b #$f,t_glisscont(a6)
  778.     rts
  779.  
  780. QC_vibratowave:
  781.     move.b t_cmdarg(a6),t_vibwave(a6)
  782.     and.b #$f,t_vibwave(a6)
  783.     rts
  784.  
  785. QC_finetune:
  786.     move.b t_cmdarg(a6),d0
  787.     and.w #$f,d0
  788.     add.w d0,d0
  789.     add.w d0,d0
  790.     move.l (a3,d0.w),t_finetune(a6)
  791.     rts
  792.     
  793. QC_jumploop:
  794.     move.b t_cmdarg(a6),d0
  795.     and.w #$f,d0
  796.     beq QC_saveloop
  797.     tst.b QC_loopcount
  798.     beq QC_saveloop
  799.     subq.b #1,QC_loopcount
  800.     beq QC_mend
  801.     move.b #1,QC_jumpbreakflag
  802.     rts    
  803. QC_newloop:
  804.     move.b d0,QC_loopcount
  805.     move.b #1,QC_jumpbreakflag
  806.     rts    
  807. QC_saveloop:
  808.     move.w QC_rowcount(pc),QC_looprow
  809.     rts
  810.  
  811. QC_tremolowave:
  812.     move.b t_cmdarg(a6),t_tremwave(a6)
  813.     and.b #$f,t_tremwave(a6)
  814.     rts
  815.  
  816. QC_initretrig:
  817.     clr.b t_retrig(a6)
  818. QC_retrignote:
  819.     addq.b #1,t_retrig(a6)
  820.     move.b t_cmdarg(a6),d0
  821.     and.b #$f,d0
  822.     cmp.b t_retrig(a6),d0
  823.     bgt QC_mend
  824.     clr.b t_retrig(a6)
  825.     move.w t_dmabit(a6),d0
  826.     or.w d0,QC_dmacon
  827.     move.l t_start(a6),(a5)
  828.     move.w t_length(a6),4(a5)
  829.     move.w t_period(a6),6(a5)
  830.     rts
  831.  
  832. QC_volumefineup:
  833.     move.b t_cmdarg(a6),d0
  834.     and.w #$f,d0
  835.     add.w d0,t_volume(a6)
  836.     cmp.w #$40,t_volume(a6)
  837.     blt QC_vfuset
  838.     move.w #$40,t_volume(a6)
  839.     move.w #$40,8(a5)
  840.     rts
  841. QC_vfuset:move.w t_volume(a6),8(a5)
  842.     rts    
  843.  
  844. QC_volumefinedown:
  845.     move.b t_cmdarg(a6),d0
  846.     and.w #$f,d0
  847.     sub.w d0,t_volume(a6)
  848.     bge QC_vfdset
  849.     clr.w t_volume(a6)
  850.     clr.w 8(a5)
  851.     rts
  852. QC_vfdset:move.w t_volume(a6),8(a5)
  853.     rts    
  854.  
  855. QC_notecut:
  856.     moveq #0,d1
  857.     move.b t_cmdarg(a6),d1
  858.     and.b #$f,d1
  859.     cmp.w QC_speedcount(pc),d1
  860.     bgt QC_mend
  861.     clr.w t_volume(a6)
  862.     clr.w 8(a5)
  863.     rts
  864.  
  865. QC_notedelay:
  866.     moveq #0,d1
  867.     move.b t_cmdarg(a6),d1
  868.     and.b #$f,d1
  869.     cmp.w QC_speedcount(pc),d1
  870.     bne QC_mend
  871.     move.w t_dmabit(a6),d0
  872.     or.w d0,QC_dmacon
  873.     move.l t_start(a6),(a5)
  874.     move.w t_length(a6),4(a5)
  875.     move.w t_period(a6),6(a5)
  876.     rts
  877.  
  878. QC_patterndelay:
  879.     move.b t_cmdarg(a6),QC_pattwait
  880.     and.b #$f,QC_pattwait
  881.     rts
  882.  
  883. QC_arptbl:rept 86        ;if your assembler doensn't want to handle
  884.     dc.b -1,0,1        ;the "rept" command, you'll have to write
  885.     endr            ;a list incl. 256 numbers like this:
  886.                 ;-1,0,1,-1,0,1,-1.. and so on.
  887.  
  888.  
  889. QC_playfx:dc.l QC_arpeggio
  890.     dc.l QC_slideup
  891.     dc.l QC_slidedown
  892.     dc.l QC_toneport
  893.     dc.l QC_vibrato
  894.     dc.l QC_toneportandvolslide
  895.     dc.l QC_vibratoandvolslide
  896.     dc.l QC_tremolo
  897.     dc.l QC_mend
  898.     dc.l QC_mend
  899.     dc.l QC_volslide
  900.     dc.l QC_mend
  901.     dc.l QC_mend
  902.     dc.l QC_mend
  903.     dc.l QC_playecommands
  904.     dc.l QC_mend
  905.  
  906. QC_playefx:dc.l QC_mend
  907.     dc.l QC_mend
  908.     dc.l QC_mend
  909.     dc.l QC_mend
  910.     dc.l QC_mend
  911.     dc.l QC_mend
  912.     dc.l QC_mend
  913.     dc.l QC_mend
  914.     dc.l QC_mend
  915.     dc.l QC_retrignote
  916.     dc.l QC_mend
  917.     dc.l QC_mend
  918.     dc.l QC_notecut
  919.     dc.l QC_notedelay
  920.     dc.l QC_mend
  921.     dc.l QC_mend
  922.  
  923. QC_efx:    dc.l QC_setfilter
  924.     dc.l QC_fineslideup
  925.     dc.l QC_fineslidedown
  926.     dc.l QC_glisscontrol
  927.     dc.l QC_vibratowave
  928.     dc.l QC_finetune
  929.     dc.l QC_jumploop
  930.     dc.l QC_tremolowave
  931.     dc.l QC_mend
  932.     dc.l QC_initretrig
  933.     dc.l QC_volumefineup
  934.     dc.l QC_volumefinedown
  935.     dc.l QC_notecut
  936.     dc.l QC_notedelay
  937.     dc.l QC_patterndelay
  938.     dc.l QC_mend
  939.  
  940. QC_fxaftersetperiod:
  941.     dc.l QC_arpeggio
  942.     dc.l QC_mend
  943.     dc.l QC_mend
  944.     dc.l QC_mend
  945.     dc.l QC_mend
  946.     dc.l QC_mend
  947.     dc.l QC_mend
  948.     dc.l QC_mend
  949.     dc.l QC_mend
  950.     dc.l QC_sampleoffset
  951.     dc.l QC_mend
  952.     dc.l QC_posjump
  953.     dc.l QC_volumechange
  954.     dc.l QC_patternbreak
  955.     dc.l QC_ecommands
  956.     dc.l QC_setspeed
  957.  
  958.  
  959. QC_vibtables:
  960.     dc.w 0,3211,6392,9511,12539,15446,18204,20787,23169,25329
  961.     dc.w 27244,28897,30272,31356,32137,32609,32767,32609,32137
  962.     dc.w 31356,30272,28897,27244,25329,23169,20787,18204,15446
  963.     dc.w 12539,9511,6392,3211
  964.     dc.w 0,-3211,-6392,-9511,-12539,-15446,-18204,-20787,-23169,-25329
  965.     dc.w -27244,-28897,-30272,-31356,-32137,-32609,-32767,-32609,-32137
  966.     dc.w -31356,-30272,-28897,-27244,-25329,-23169,-20787,-18204,-15446
  967.     dc.w -12539,-9511,-6392,-3211
  968.  
  969.     dc.w 32767,31744,30720,29696,28672,27648,26624,25600,24576,23552
  970.     dc.w 22528,21504,20480,19456,18432,17408,16384,15360,14336,13312
  971.     dc.w 12288,11264,10240,9216,8192,7168,6144,5120,4096,3072,2048,1024
  972.     dc.w 0,-1024,-2048,-3072,-4096,-5120,-6144,-8168,-8192,-9216,-10240
  973.     dc.w -11264,-12288,-13312,-14336,-15360,-16384,-17408,-18432,-19456
  974.     dc.w -20480,-21504,-22528,-23552,-24576,-25600,-26624,-27648,-28672
  975.     dc.w -29696,-30720,-31744,-32768
  976.  
  977.     dc.w 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767
  978.     dc.w 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767
  979.     dc.w 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767
  980.     dc.w 32767,32767
  981.     dc.w -32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767
  982.     dc.w -32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767
  983.     dc.w -32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767
  984.     dc.w -32767,-32767
  985.     
  986.  
  987.  
  988.  
  989. QC_periods:dc.l QC_periodtable
  990.     dc.l QC_periodtable+72
  991.     dc.l QC_periodtable+144
  992.     dc.l QC_periodtable+216
  993.     dc.l QC_periodtable+288
  994.     dc.l QC_periodtable+360
  995.     dc.l QC_periodtable+432
  996.     dc.l QC_periodtable+504
  997.     dc.l QC_periodtable+576
  998.     dc.l QC_periodtable+648
  999.     dc.l QC_periodtable+720
  1000.     dc.l QC_periodtable+792
  1001.     dc.l QC_periodtable+864
  1002.     dc.l QC_periodtable+936
  1003.     dc.l QC_periodtable+1008
  1004.     dc.l QC_periodtable+1080
  1005.  
  1006.  
  1007. QC_periodtable:
  1008.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  1009.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  1010.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113
  1011.  
  1012.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  1013.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  1014.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113
  1015.  
  1016.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  1017.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  1018.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112
  1019.  
  1020.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  1021.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  1022.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111
  1023.  
  1024.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  1025.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  1026.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110
  1027.  
  1028.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  1029.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  1030.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109
  1031.  
  1032.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  1033.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  1034.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109
  1035.  
  1036.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  1037.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  1038.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108
  1039.  
  1040.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  1041.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  1042.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120
  1043.  
  1044.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  1045.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  1046.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119
  1047.  
  1048.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  1049.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  1050.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118
  1051.  
  1052.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  1053.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  1054.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118
  1055.  
  1056.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  1057.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  1058.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117
  1059.  
  1060.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  1061.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  1062.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116
  1063.  
  1064.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  1065.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  1066.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115
  1067.  
  1068.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  1069.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  1070.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114
  1071.  
  1072.  
  1073. QC_samplepointers:
  1074.     rept 256
  1075.     dc.l QC_quietsamp
  1076.     endr
  1077.  
  1078. QC_patternpointers:
  1079.     rept 256
  1080.     dc.l 0
  1081.     endr
  1082.  
  1083. QC_currpattpointer:dc.l 0
  1084. QC_posstart:dc.l 0
  1085. QC_nrofpos:dc.w 0
  1086. QC_pos:    dc.w 0
  1087. QC_speed:dc.w 6
  1088. QC_speedcount:dc.w 0
  1089. QC_breakrow:dc.w 0
  1090. QC_newrow:dc.w 0
  1091. QC_newposnr:dc.w 0
  1092. QC_rowcount:dc.w 0
  1093. QC_dmacon:dc.w 0
  1094. QC_looprow:dc.w 0
  1095. QC_tempo:dc.w 125
  1096. QC_oldirq:dc.l 0
  1097. QC_newposflag:dc.b 0
  1098. QC_jumpbreakflag:dc.b 0
  1099. QC_loopcount:dc.b 0
  1100. QC_pattwait:dc.b 0
  1101.  
  1102. QC_quietsamp:
  1103.     dc.w 0,1
  1104.     dcb.b 20
  1105.     dc.w 0
  1106.     dc.w 1
  1107.     dc.l QC_quiet
  1108.  
  1109. t_notenr = 1
  1110. t_cmd = 2
  1111. t_cmdarg = 3
  1112. t_repeat = 4
  1113. t_replen = 8
  1114. t_period = 10
  1115. t_volume = 12
  1116. t_length = 14
  1117. t_finetune = 42
  1118. t_start = 18
  1119. t_dmabit = 22
  1120. t_notenr2 = 24
  1121. t_wantedperiod = 26
  1122. t_portdir = 28
  1123. t_vibwave = 29
  1124. t_glisscont = 30
  1125. t_vibcmd = 31
  1126. t_vibpos = 32
  1127. t_tremwave = 34
  1128. t_tremcmd = 35
  1129. t_trempos = 36
  1130. t_sampleoffset = 38
  1131. t_retrig = 39
  1132. t_portspeed = 40
  1133.  
  1134.     even
  1135. QC_chan1:dc.l 0            ;The note and command
  1136.     dc.l 0            ;Repeat
  1137.     dc.w 0            ;Replen
  1138.     dc.w 0            ;Period
  1139.     dc.w 0            ;Volume
  1140.     dc.w 0            ;Length
  1141.     dc.w 0            ;Finetune
  1142.     dc.l 0            ;Start
  1143.     dc.w 1            ;DMAbit
  1144.     dc.w 0            ;NoteNr2
  1145.     dc.w 0            ;WantedPeriod
  1146.     dc.b 0            ;Portdir
  1147.     dc.b 0            ;VibWave
  1148.     dc.b 0            ;Glisscont
  1149.     dc.b 0            ;Vibcmd
  1150.     dc.w 0            ;VibPos
  1151.     dc.b 0            ;Tremwave
  1152.     dc.b 0            ;Tremcmd
  1153.     dc.w 0            ;Trempos
  1154.     dc.b 0            ;Sampleoffset
  1155.     dc.b 0            ;Retrig
  1156.     dc.b 0            ;Portspeed
  1157.     dc.b 0            ;
  1158.     dc.l 0            ;FineTune
  1159.  
  1160.     even
  1161. QC_chan2:dc.l 0
  1162.     dc.l 0
  1163.     dc.w 0
  1164.     dc.w 0
  1165.     dc.w 0
  1166.     dc.w 0
  1167.     dc.w 0
  1168.     dc.l 0
  1169.     dc.w 2
  1170.     dc.w 0
  1171.     dc.w 0
  1172.     dc.b 0
  1173.     dc.b 0
  1174.     dc.b 0
  1175.     dc.b 0
  1176.     dc.w 0
  1177.     dc.b 0
  1178.     dc.b 0
  1179.     dc.w 0
  1180.     dc.b 0
  1181.     dc.b 0
  1182.     dc.b 0
  1183.     dc.b 0
  1184.     dc.l 0
  1185.  
  1186.     even
  1187. QC_chan3:dc.l 0
  1188.     dc.l 0
  1189.     dc.w 0
  1190.     dc.w 0
  1191.     dc.w 0
  1192.     dc.w 0
  1193.     dc.w 0
  1194.     dc.l 0
  1195.     dc.w 4
  1196.     dc.w 0
  1197.     dc.w 0
  1198.     dc.b 0
  1199.     dc.b 0
  1200.     dc.b 0
  1201.     dc.b 0
  1202.     dc.w 0
  1203.     dc.b 0
  1204.     dc.b 0
  1205.     dc.w 0
  1206.     dc.b 0
  1207.     dc.b 0
  1208.     dc.b 0
  1209.     dc.b 0
  1210.     dc.l 0
  1211.  
  1212.     even
  1213. QC_chan4:dc.l 0
  1214.     dc.l 0
  1215.     dc.w 0
  1216.     dc.w 0
  1217.     dc.w 0
  1218.     dc.w 0
  1219.     dc.w 0
  1220.     dc.l 0
  1221.     dc.w 8
  1222.     dc.w 0
  1223.     dc.w 0
  1224.     dc.b 0
  1225.     dc.b 0
  1226.     dc.b 0
  1227.     dc.b 0
  1228.     dc.w 0
  1229.     dc.b 0
  1230.     dc.b 0
  1231.     dc.w 0
  1232.     dc.b 0
  1233.     dc.b 0
  1234.     dc.b 0
  1235.     dc.b 0
  1236.     dc.l 0
  1237.  
  1238.     even
  1239. QC_data:
  1240.     dc.l 0            ;Your module here!
  1241.  
  1242.  
  1243.     section QC,data_c
  1244.  
  1245.  
  1246. QC_quiet:dc.w 0
  1247.  
  1248.